package com.ktjiaoyu.crm.controller;

import com.ktjiaoyu.crm.base.shiro.MyShiroRealm;
import com.ktjiaoyu.crm.pojo.Right;
import com.ktjiaoyu.crm.pojo.Role;

import com.ktjiaoyu.crm.service.RoleService;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.mgt.RealmSecurityManager;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.annotation.Resource;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Controller
@RequestMapping(value = "/role")
public class RoleController {
    @Resource
    private RoleService roleService;

    @RequestMapping(value = "/list")
    public String list(@RequestParam(required = false,defaultValue = "")String roleName, @RequestParam(required =
            false,defaultValue = "1") int pageIndex, Model model){
        Sort sort=Sort.by(Sort.Direction.ASC,"roleId");
        //控制分页的辅助类，可以设置页码（从0开始！！！）、每页的数据条数、排序等
        Pageable pageable= (Pageable) PageRequest.of(pageIndex-1,3,sort);
        Page<Role> rolePage= (Page<Role>) roleService.findRole(roleName, pageable);
        model.addAttribute("rolePage",rolePage);
        //数据回显
        model.addAttribute("roleName",roleName);//保存查询条件

        return "role/list";
    }


//    @RequestMapping("/role/json")
//    @ResponseBody
//    public List<Role> findAllRoles(){
//        List<Role> list=roleService.findAllRoles();
//        return list;
//    }

    //跳转到添加页面
    @RequestMapping(value = "/add")
    public String add(Model model){
        //查找所有权限，用于指派权限
        List<Right> rights=roleService.findAllRights();
        model.addAttribute("rights",rights);
        return "role/add";
    }
    //跳转到修改页面
    @RequestMapping(value = "/edit")
    public String edit(Long roleId,Model model){
        Role role=roleService.getRole(roleId);
        model.addAttribute("role",role);
        //查找角色拥有的权限
        List<Right> roleRights=roleService.findRightsByRole(role);
        model.addAttribute("roleRights",roleRights);
        //查找所有权限，用于指派权限
        List<Right> rights=roleService.findAllRights();
        model.addAttribute("rights",rights);
        return "role/edit";
    }

    @RequestMapping(value = "/save")
    public String save(Role role,String[] rightCodes){
        if (rightCodes!=null){
            for (String rightCode : rightCodes) {
                Right right=new Right();
                right.setRightCode(rightCode);
                role.getRights().add(right);//将关闭的权限添加到角色中，用于级联新增关联表的数据
            }
        }
        roleService.saveRole(role);//新增，会级联新增关联表的数据
        //清空权限缓存
        RealmSecurityManager rsm= (RealmSecurityManager) SecurityUtils.getSecurityManager();
        MyShiroRealm realm=(MyShiroRealm) rsm.getRealms().iterator().next();
        realm.clearMyCachedAuthorizationInfo();
        return "redirect:/role/list";//增删改之后跳转最好使用重定向
    }
    @RequestMapping(value = "/del")
    @ResponseBody//返回json
    public Map del(Long roleId){//ajax删除
        Map map=new HashMap();
        try{
            roleService.deleteRoleById(roleId);
            map.put("delResult",true);
        } catch (Exception e) {
            e.printStackTrace();
            map.put("delResult",false);
        }
        return map;
    }
}
